home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / asm-generic / bitops / __ffs.h next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  729 b   |  44 lines

  1. #ifndef _ASM_GENERIC_BITOPS___FFS_H_
  2. #define _ASM_GENERIC_BITOPS___FFS_H_
  3.  
  4. #include <asm/types.h>
  5.  
  6. /**
  7.  * __ffs - find first bit in word.
  8.  * @word: The word to search
  9.  *
  10.  * Undefined if no bit exists, so code should check against 0 first.
  11.  */
  12. static inline unsigned long __ffs(unsigned long word)
  13. {
  14.     int num = 0;
  15.  
  16. #if BITS_PER_LONG == 64
  17.     if ((word & 0xffffffff) == 0) {
  18.         num += 32;
  19.         word >>= 32;
  20.     }
  21. #endif
  22.     if ((word & 0xffff) == 0) {
  23.         num += 16;
  24.         word >>= 16;
  25.     }
  26.     if ((word & 0xff) == 0) {
  27.         num += 8;
  28.         word >>= 8;
  29.     }
  30.     if ((word & 0xf) == 0) {
  31.         num += 4;
  32.         word >>= 4;
  33.     }
  34.     if ((word & 0x3) == 0) {
  35.         num += 2;
  36.         word >>= 2;
  37.     }
  38.     if ((word & 0x1) == 0)
  39.         num += 1;
  40.     return num;
  41. }
  42.  
  43. #endif /* _ASM_GENERIC_BITOPS___FFS_H_ */
  44.